package com.zzyk.main.service;

import com.zzyk.main.configuration.exception.UserException;
import com.zzyk.main.model.pojo.MaintenanceInfo;
import com.zzyk.main.model.vo.DateAndString;
import com.zzyk.main.model.vo.MaintenanceView;
import com.zzyk.main.model.vo.Message;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * @author wss_PC
 */
public interface MaintenanceInfoService {


    int deleteByPrimaryKey(Integer id);

    int insert(MaintenanceInfo record);

    int insertSelective(MaintenanceInfo record) throws UserException;

    MaintenanceInfo selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(MaintenanceInfo record);

    int updateByPrimaryKey(MaintenanceInfo record);

    /**
     * 添加设备维保信息并进行文件上传
     *
     * @param maintenanceInfo
     */
    void insertMaintenanceInfo(MaintenanceInfo maintenanceInfo, Integer userId) throws IOException, UserException;

    /**
     * 根据维保时间查询记录 参数为空查询全部
     *
     * @param beginTime
     * @param endTime
     * @param type       1、生产设备维保，0采集设备
     * @param areaArr
     * @param deviceList
     * @return
     */
    List<MaintenanceInfo> selectAllByParam(String beginTime, String endTime, Integer type, Integer enterprise, String[] areaArr, String name, Integer deviceTyp, Integer[] deviceList);

    /**
     * 修改设备信息并修改文件
     *
     * @param maintenanceInfo
     */
    void updateByPrimaryKeyAndFileUpload(MaintenanceInfo maintenanceInfo, Integer userId) throws IOException, UserException;



    /*   *//**
     * 获取本月需要维保的四个值
     *
     * @return
     *//*
    List<CommonCount> findMaintenanceStatusThisMonth();*/

    /**
     * 根据设备ID查询维保情况维保倒计时，上次维保时间
     *
     * @param id
     * @return
     */
    DateAndString selectMaintenanceInfoByDId(Integer id);

    /**
     * 根据维保记录ID删除维保信息。
     *
     * @param id
     */
    void deleteMaintenanceByPrimaryKey(Integer id);

    /**
     * 查询今日需要维保的设备
     *
     * @throws IOException
     */
    void findNeedMaintenanceToday() throws IOException;

    /**
     * 根据企业ID获取某个范围的维保数据
     *
     * @param dateTime
     * @param enterprise
     * @param deviceList
     * @return
     */
    List<MaintenanceInfo> findDateRangeMaintenance(String dateTime, Integer enterprise, Integer[] deviceList);

    /**
     * 获取结论设备故障最多预防性维修次数最多
     *
     * @param dateTime
     * @param enterprise
     * @param deviceList
     * @return
     */
    Message findConclusion(String dateTime, Integer enterprise, Integer[] deviceList);

    /**
     * 获取设备故障维修排行
     *
     * @param dateTime
     * @param enterprise
     * @param deviceList
     * @return
     */
    List<MaintenanceView> findFailureRanking(String dateTime, Integer enterprise, Integer[] deviceList);

    /**
     * 根据日期范围和当前登录用户的企业ID获取维保记录
     *
     * @param dateTime
     * @param enterprise
     * @param deviceList
     * @return
     */
    List<MaintenanceInfo> findInfoList(String dateTime, Integer enterprise, Integer[] deviceList);


    List<Map<Object, Object>> countMaintenanceInfoByParam(String beginTime, String endTime, Integer type, Integer enterprise,String[] areaArr, String name, Integer deviceType, Integer[] deviceList);

    List<Map<Object, Object>> countMaintenanceInfoByParamApi(String beginTime, String endTime, Integer type, Integer enterprise, Object o, String name, Integer deviceType, Integer[] deviceList);
}







